package com.ww.java8.datetime;

import java.time.LocalDate;
import java.time.Month;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;

/**
 * LocalDate是带有年、月、日的日期
 *
 * @author wanggw
 */
public class LocalDateDemo {

    public static void main(String[] args) {
//        test02();
        test3();
    }

    static void test01() {
        LocalDate today = LocalDate.now();
        LocalDate lambdaAuthBirthday = LocalDate.of(1903, 6, 14);
        LocalDate.of(1903, Month.JUNE, 14);
    }

    /**
     * 方法介绍
     * 1.now，of：静态方法会构建一个LocalDate，要么从当前时间构建，要么从给定的年月日构建
     * 2.plusDays，plusWeeks，plusMonths，plusYears：在当前LocalDate上加上一定量的天、星期、月或年
     * 3.minusDays，minusWeeks，minusMonths，minusYears：在当前LocalDate上减去一定量的天、星期、月或年
     * 4.plus，minus：加上或减去一个Duration或Period
     * 5.withDayOfMonth，withDayOfYear，withMonth，withYear：返回一个新的LocalDate，其月的日期、年的日期、月或年修改
     * 为给定的值
     * 6.getDayOfMonth：获取月的日期（在1到31之间）
     * 7.getDayOfYear：获取年的日期（在1到366之间）
     * 8.getDayOfWeek：获取星期日期，返回DayOfWeek枚举值
     * 9.getMonth，getMonthValue：获取月份的Month枚举值，或者是1~12之间的数字
     * 10.getYear
     * 11.util
     * 12.isBefore，isAfter：将当前的LocalDate与另一个LocalDate进行比较
     * 13.isLeapYear：是否为闰年
     */
    static void test02() {
        /**
         * 指定字段修改属性值
         * 修改一个LocalDate对象，最直接也是最简单的方法是使用withAttribute方法，withAttribute方法会创建对象的一个副本
         */
        LocalDate date1 = LocalDate.of(2024, 2, 23);
        // 2024-02-23
        System.out.println(date1);

        LocalDate date2 = date1.withYear(2025);
        // 2025-02-23
        System.out.println(date2);
        // 2024-02-23
        // 修改的是对象的副本，不会修改原对象
        System.out.println(date1);

        // 修改月份中天
        LocalDate date3 = date2.withDayOfMonth(25);
        // 2025-02-25
        System.out.println(date3);

        // 修改月份
        LocalDate date4 = date3.with(ChronoField.MONTH_OF_YEAR, 9);
        // 2025-09-25
        System.out.println(date4);
    }

    /**
     * 计算
     * 都是修改对象副本，不影响原对象值
     */
    private static void test3() {
        LocalDate date1 = LocalDate.of(2024, 2, 23);
        System.out.println("date1: " + date1);

        // 加一周
        LocalDate date2 = date1.plusWeeks(1);
        System.out.println("date2: " + date2);
        System.out.println("date1: " + date1);

        LocalDate date3 = date2.minusYears(6);
        // 减6天
        System.out.println("date3: " + date3);
        System.out.println("date2: " + date2);

        // 加6个月
        LocalDate date4 = date3.plus(6, ChronoUnit.MONTHS);
        System.out.println("date4: " + date4);
        System.out.println("date3: " + date3);
    }
}








































